// public class Exam
// {
//     public class MaterialData
//     {
//         public ItemData item;   // 合成所需的物品
//         public int count;       // 合成所需的该物品的数量
//     }

//     public class ItemData
//     {
//         public int id;                          // 物品 ID
//         public int count;                       // 当前拥有的物品数量
//         public int costGold;                    // 合成该物品所需的金币
//         public List<MaterialData> materialList; // 合成该物品所需的材料
//     }

//     /// <summary>
//     /// 计算用 totalGold 金币最多可以合成的 item 装备的数量
//     /// </summary>
//     /// <param name="item">要合成的装备</param>
//     /// <param name="totalGold">拥有的金币</param>
//     /// <returns>可合成的 item 装备的最大数量</returns>
//     public int Run(ItemData item, int totalGold)
//     {
//         if (item.materialList == null || item.materialList.Count == 0)
//         {
//             return Math.Min(item.count, totalGold / item.costGold);
//         }

//         int maxPossible = int.MaxValue;

//         foreach(var material in item.materialList)
//         {
//             int matmax = Run(material.item, totalGold) / material.count;
//             maxPossible = Math.Min(maxPossible, matmax);
//         }

//         int goldLimit = totalGold / item.costGold;
//         maxPossible = Math.Min(maxPossible, goldLimit);
//         return maxPossible;
//     }



using System;
using System.Collections.Generic;

public class Exam
{
    public class MaterialData
    {
        public ItemData item;   // 合成所需的物品
        public int count;       // 合成所需的该物品的数量
    }

    public class ItemData
    {
        public int id;                          // 物品 ID
        public int count;                       // 当前拥有的物品数量
        public int costGold;                    // 合成该物品所需的金币
        //数组
        public List<MaterialData> materialList; // 合成该物品所需的材料
    }

    /// <summary>
    /// 计算用 totalGold 金币最多可以合成的 item 装备的数量
    /// </summary>
    /// <param name="item">要合成的装备</param>
    /// <param name="totalGold">拥有的金币</param>
    /// <returns>可合成的 item 装备的最大数量</returns>
    public int Run(ItemData item, int totalGold)
    {
        if (item.materialList == null || item.materialList.Count == 0)
            return Math.Min(item.count, totalGold / item.costGold);
        int mmax = 0xofofofof;
        foreach (var material in item.materialList)
        {
            int matmax = Run(material.item, totalGold) / material.count;
            mmax = Math.Min(mmax, matmax);
        }
        int goldLimit = totalGold / item.costGold;
        mmax = Math.Min(mmax, goldLimit);
        return maxPossible;
    }
}